﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 重写01
{
    class Program
    {
        static void Main(string[] args)
        {
            //Cat cat1 = new Cat();
            //cat1.Run();//maoRun

            // 用动物的盒子去装猫，真实类型是猫，但是引用是动物
            // 父类的引用指向了子类
            Animal animal1 = new Cat();
            // 运行期间，重写方法会根据真实类型去调用，非重写方法会根据引用的类型来调用
            animal1.Run();//animal Run
            Animal animal2 = new Dog();
            animal2.Run();
            Animal animal3 = new Animal();
            animal3.Run();

            // 多态产生的条件：
            // 1.存在继承
            // 2.父类的引用指向子类
            // 3.存在重写方法

            // 重写方法的参数和返回值必须要跟被重写的方法一致
            // 虚方法可以重写也可以不重写
        }
    }
}
